using System;
using System.Collections.Generic;
using System.Text;

namespace Sistema_Bancario.Controllers
{
    public class CajaDeAhorro : Cuenta
    {
        
        const uint MONTO_MAXIMO_EXTRACCION_PERMITIDA = 1000;

        #region CONSTRUCTOR
        public CajaDeAhorro(String numeroDeCuenta, Cliente unCliente) 
            : base(numeroDeCuenta, unCliente)
        {

        }
        #endregion


        #region OVERRIDES
        public override void depositarDinero(uint montoADepositar)
        {
            this.saldo = this.saldo + montoADepositar;
        }


        public override void extraerDinero(float montoAExtraer)
        {
            //  Verifico si es mayor al monto permitido
            if (montoAExtraer > MONTO_MAXIMO_EXTRACCION_PERMITIDA)
            {
                ExtraccionMayorAlPermitidoException excPorMontomaximoPermitido;
                excPorMontomaximoPermitido = new ExtraccionMayorAlPermitidoException
                    ("No se puede extraer mas de "+MONTO_MAXIMO_EXTRACCION_PERMITIDA);
                throw excPorMontomaximoPermitido;
            }


            //  Verifico si tiene fondos para extraer
            if (montoAExtraer < 0)
            {
                float diferenciaDeMontos = montoAExtraer - this.saldo; 
                ExtraccionSinFondosExcepcion excPorNoTenerSaldo;
                excPorNoTenerSaldo = new ExtraccionSinFondosExcepcion("Le faltan $" + diferenciaDeMontos);
                throw excPorNoTenerSaldo;
            }


            //  si no se lanzaron excepciones entonces descuento el saldo
            this.saldo = this.saldo - montoAExtraer;
        }


        public override void mostrarInfoDeCuentaConSaldonegativo()
        {
            // No hace nada. es una caja de ahorro
        }
        #endregion

    }



    #region EXCEPCIONES DE LA CLASE
    public class ExtraccionMayorAlPermitidoException : Exception
    {
        public ExtraccionMayorAlPermitidoException(String mensaje)
            : base(mensaje)
        {
        }

    }
    #endregion

}
